#ifndef PLAYERPAGE_H
#define PLAYERPAGE_H

#include <QWidget>
#include <QMouseEvent>
#include <QFrame>
#include "volume.h"
#include "playspeed.h"
#include "mpv/mpvplayer.h"
#include "bulletscreenitem.h"
#include "model/data.h"
#include "model/datacenter.h"
#include "login.h"
namespace Ui {
class PlayerPage;
}

class PlayerPage : public QWidget
{
    Q_OBJECT
public:
    explicit PlayerPage(const model::VideoInfo& videoInfo, QWidget *parent = nullptr);
    ~PlayerPage();

    // 播放视频
    void startPlaying();

    // 设置用户头像
    void setUserIcon(QPixmap& userIcon);

private slots:
    // 处理 "拖动"事件: 鼠标点击事件 + 鼠标移动事件
    void mousePressEvent(QMouseEvent *event);

    void mouseMoveEvent(QMouseEvent* event);

    // 退出界面
    void onQuitBtnClicked();

    // 音量调节
    void onVolumeBtnClicked();
    // 倍速播放
    void onSpeedBtnClicked();
    //移动弹出的窗口
    void moveWindows(const QPoint& point);
    // 点赞
    void onLikeImageBtnClicked();
    // 暂停和播放
    void onPlayBtnCkicked();
    // 倍速调节
    void onPlaySpeedChanged(double speed);
    // 音量调节
    void onVolumeChanged(int64_t volume);
    // 当前播放时间
    void onPlayPositionChanged(int64_t curPlayTime);
    // 拖拽进度条控制播放时间
    void onSetPlayProgress(double playRatio);
    // 开关弹幕
    void onBulletScreenBtnCkicked();
    // 发送弹幕
    void onSendBulletScreenBtnClicked(const QString &text);
    // 播放结束
    void onEndOfPlayList();
    // 用户头像点击
    void onUserAvatarBtnClicked();

private:
    // 秒->时:钟:秒
    QString seconds2Time(int64_t seconds);
    // 初始化弹幕
    void initBarrageArea();
    // 加载弹幕数据
    void loadBulletScreenData();
    // 显示弹幕
    void showBulletScreen();
    // 设置视频界面信息
    void updateVideoInfoUI();
    // 更新播放次数
    void updatePlayCount();

signals:
    // 通知videoBox更新界面中的播放数
    void increasePlayCount();
    // 通知videoBox更新界面中的点赞数
    void updateLikeNum(int64_t likeCount);

private:
    Ui::PlayerPage *ui;

    QPoint dragPos; // 相对距离: 鼠标点击时和程序窗口

    // ⾳量调节窗⼝
    Volume* volume = nullptr;

    // 倍数播放窗⼝
    PlaySpeed* playSpeed = nullptr;

    // 视频播放类
    MpvPlayer* mpv = nullptr;

    // 视频是否播放
    bool isPlay = false;

    // 标记视频播放数是否已经更新，默认情况下未更新
    bool isUpdatePlayNum = false;

    // 用户是否已经点赞过视频
    bool isLike = false;
    // 标记点赞数
    int64_t likeCount;

    // 弹幕相关信息
    QDialog* barrageArea = nullptr;
    QFrame* top = nullptr;
    QFrame* middle = nullptr;
    QFrame* bottom = nullptr;
    QMap<int64_t, QList<BulletScreenInfo>> bulletScreenLists;
    bool isStartBS = true;  // 默认开启弹幕

    // 视频信息
    model::VideoInfo videoInfo;

    // 时间-弹幕数据
    QHash<int64_t, QList<model::BarrageInfo>> barrages;

    // 登录界面
    Login* login = nullptr;
};

#endif // PLAYERPAGE_H
